{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial 1b: Generate hard-links using PASTE" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "import math\n", "import time\n", "import pandas as pd\n", "import numpy as np\n", "import scanpy as sc\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "import matplotlib.patches as mpatches\n", "from matplotlib import style\n", "import paste as pst" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", "data_dir = \"../../spatial_benchmarking/benchmarking_data/DLPFC12\"\n", "section_ids = ['151507', '151508']\n", "\n", "def load_DLPFC(root_dir='../benchmarking_data/DLPFC12', section_id='151507'):\n", " # 151507, ..., 151676 12 in total\n", " ad = sc.read_visium(path=os.path.join(root_dir, section_id), count_file=section_id+'_filtered_feature_bc_matrix.h5')\n", " ad.var_names_make_unique()\n", "\n", " gt_dir = os.path.join(root_dir, section_id, 'gt')\n", " gt_df = pd.read_csv(os.path.join(gt_dir, 'tissue_positions_list_GTs.txt'), sep=',', header=None, index_col=0)\n", " ad.obs['original_clusters'] = gt_df.loc[:, 6]\n", " keep_bcs = ad.obs.dropna().index\n", " ad = ad[keep_bcs].copy()\n", " ad.obs['original_clusters'] = ad.obs['original_clusters'].astype(int).astype(str)\n", " # print(ad.obs)\n", " return ad\n", "\n", "Batch_list = []\n", "for section_id in section_ids:\n", " ad_ = load_DLPFC(root_dir=data_dir, section_id=section_id)\n", " ad_.var_names_make_unique(join=\"++\")\n", "\n", " # make spot name unique\n", " ad_.obs_names = [x+'_'+section_id for x in ad_.obs_names]\n", " \n", " \n", " sc.pp.filter_genes(ad_, min_counts = 15)\n", " sc.pp.filter_cells(ad_, min_counts = 100)\n", " ad_.obsm['spatial'] = ad_.obsm['spatial'].to_numpy()\n", "\n", " Batch_list.append(ad_)\n", "\n", "slice1, slice2 = Batch_list" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import ot\n", "start = time.time()\n", "\n", "pi12 = pst.pairwise_align(slice1, slice2, use_gpu=True, backend = ot.backend.TorchBackend())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pis = [pi12]\n", "slices = [slice1, slice2]\n", "\n", "new_slices = pst.stack_slices_pairwise(slices, pis)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "for i, L in enumerate(new_slices):\n", " spatial_data = L.obsm['spatial']\n", "\n", " output_path = os.path.join('./', f\"coordinates_{section_ids[i]}.csv\")\n", " pd.DataFrame(spatial_data).to_csv(output_path, index=False)\n", " print(f\"Saved spatial data for slice {i} to {output_path}\")" ] } ], "metadata": { "kernelspec": { "display_name": "MaskGraphene", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.19" } }, "nbformat": 4, "nbformat_minor": 2 }